package Basic9;

public class J16_Printer {

	public static void main(String[] args) {
		// 인터페이스 활용하기

		Inkjet_Printer_V3 ink = new Inkjet_Printer_V3();
		Laser_Printer_V3 las = new Laser_Printer_V3();

	}// 메인
}// 클래스

// 잉크젯 ,레이저 프린터 클래스를 작성하기 위해
// extends와 implements예약어를 사용하는 것은 왠지 복잡해 보인다.
//또, 특정 클래스에서 사용하지 않는 메서드임에도 불구하고 인터페이스 규칙상 작성해야 하는
//불편함도 존재한다. (예 inkjet : print(), showRemain())
//				(예 laser: print()만 제공)
// 따라서 이것을 간편하게 작성하기 위해 기본 base클래스 개념을 도입함.

interface Printer_V3_Service {
	void print();
	int showRemain();
}// V3프린터

class Printer_V3 implements Printer_V3_Service {
	private String model;
	private String maker;
	private String type;
	private int papers;
	private int remain;

	@Override
	public void print() {

	}

	// 레이저 프린터에서는 제공하지 않는 기능이지만 인터페이스를 구현했으므로
	// 어쩔 수 없이 showRemain메서드를 재정의 해야한다.
	// 즉, 필요없지만 약속에 의해 어거지로 작성한다.

	@Override
	public int showRemain() {
		return 100;
	}

}

class Inkjet_Printer_V3 extends Printer_V3 {
	@Override
	public void print() {
		System.out.println("잉크젯프린터입니다.");
	}
	
	@Override
	public int showRemain() {
		return super.showRemain();
	}
}

class Laser_Printer_V3 extends Printer_V3 {
	@Override
	public void print() {
		System.out.println("레이저 프린터입니다.");
	}
}
